A data network facilitates data transfers between two or more data processing systems. For example, an application executing in one data processing system acts as the sender of the data, and another application executing in another data processing system acts as the receiver of the data. Between the sender system (also referred to herein as “host” or “sender node”) and the receiver system (also referred to herein as “receiver node”), the data follows a data path that comprises one or more links between networking components, such as routers and switches.
In a data processing environment, such as in a datacenter, many data processing systems are connected via a data network. At any given time, several systems may be transmitting data of various sizes to several other systems. Many of these data transmissions can utilize a common link in the network, to get from their respective sender systems to their respective receiver systems.
A data communication link in a network can become congested when more than a threshold amount of data traffic tries to use the link during a given period. The data traffic of some data flows (hereinafter, “flow”, or “flows”) appears in bursts, causing the data traffic on a link to spike. A link can also be over-subscribed, i.e., too many flows may try to use the link at a given time. Flow collisions, packet loss, network latency, and timeouts are some examples of problems that are caused when the utilization of a link exceeds a threshold.
Some flows in a network are small flows and some are large flows. A flow that transmits less than a threshold amount of data in a given period is a small flow. A flow that transmits the threshold amount of data or more in a given period is a large flow.
The data of a flow comprises packets of data. Generally, the larger the flow, the more the number of the packets therein. The packets of the various flows wanting to use a link are queued. For using a link, the packets of a small flow that are queued after the packets of a large flow will have to wait significantly longer to use the link, as compared to when the packets of the small flow are queued after the packets of another small flow.
Typically, over a period of operation in a data network, small flows outnumber large flows but data transmitted by large flows exceeds the data transmitted by small flows. Thus, the use of communication links in a network by a mix of large and small flows often results in unacceptable performance of applications and operations related to the small flows, because of the large flows.